"""表格控件示例模块

该模块演示了如何使用PySide6的QTableWidget类创建表格控件，
展示如何设置表格的行列、表头、数据等内容。
"""

import sys
from PySide6 import QtCore, QtWidgets, QtGui
# from PySide6.QtWidgets import *

class MyWidget(QtWidgets.QWidget):
    """表格控件窗口类
    
    创建一个包含表格控件的简单窗口，演示表格控件的基本用法和事件处理。
    """
    
    def __init__(self):
        """初始化窗口组件"""
        super().__init__()
        # 设置窗口标题
        self.setWindowTitle('table')

        # 创建水平布局管理器
        self.layout = QtWidgets.QHBoxLayout(self)

        # 创建表格控件
        tableW = QtWidgets.QTableWidget()

        # 设置表格的列数和行数
        tableW.setColumnCount(3)
        tableW.setRowCount(4)

        # 调整行高和列宽以适应内容
        tableW.resizeRowsToContents()
        # tableW.resizeColumnsToContents()

        # 设置表格水平表头标签
        tableW.setHorizontalHeaderLabels(['姓名', '年龄', '籍贯'])

        # 隐藏水平表头（已注释）
        # tableW.horizontalHeader().setVisible(False)

        # 设置表头自适应宽度
        tableW.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        # tableW.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

        # 设置垂直表头的最小高度
        tableW.verticalHeader().setMinimumSectionSize(5)

        # 设置特定列的宽度（已注释）
        # tableW.horizontalHeader().resizeSection(1, 100)

        # 隐藏垂直表头（序号列）（已注释）
        # tableW.verticalHeader().hide()

        # 隐藏表格边框（已注释）
        # tableW.setShowGrid(False)

        # 禁止编辑表格内容
        tableW.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

        # 设置选择行为为整行选择
        tableW.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)

        # 将表格添加到布局中
        self.layout.addWidget(tableW)

        # 设置表格数据
        tableW.setItem(0, 0, QtWidgets.QTableWidgetItem('小明'))
        tableW.setItem(0, 1, QtWidgets.QTableWidgetItem('26'))
        tableW.setItem(0, 2, QtWidgets.QTableWidgetItem('河北'))

        # 连接表格点击信号到处理槽函数
        tableW.clicked.connect(self.magic)

    @QtCore.Slot()
    def magic(self, item):
        """表格项点击事件处理槽函数
        
        当用户点击表格项时，打印被点击的行号。
        
        Args:
            item: 被点击的表格项
        """
        print(item.row())

if __name__ == "__main__":
    # 创建应用程序实例
    app = QtWidgets.QApplication([])

    # 创建并显示窗口
    widget = MyWidget()
    widget.resize(500, 400)
    widget.show()

    # 运行应用程序事件循环
    sys.exit(app.exec())